Przykad 6.7. Algorytm Floyda-Warshalla obliczania najkrtszej cieki midzy wszystkimi parami
#include "Graph.h"

void allPairsShortest (Graph const &graph,              /* we */
                       vector< vector<int> > &dist,     /* wy */
                       vector< vector<int> > &pred) {   /* wy */
   int n = graph.numVertices();

   // Zainicjuj dist[][] zerami na przektnej, NIESKOCZONOCI tam,
   // gdzie nie ma krawdzi, i wag krawdzi (u,v) na pozycjach dist[u][v].
   // Tablica pred jest inicjowana odpowiednio.
   for (int u = 0; u < n; u++) {
      dist.assign(n, numeric_limits<int>::max());
      pred.assign(n, -1);
      dist[u][u] = 0;
      for (VertexList::const_iterator ci = graph.begin(u);
           ci != graph.end(u); ++ci) {
         int v = ci->first;
         dist[u][v] = ci->second;
         pred[u][v] = u;
      }
   }

   for (int k = 0; k < n; k++) {
      for (int i = 0; i < n; i++) {
         if (dist[i][k] == numeric_limits<int>::max()) { continue; }

         // W wypadku znalezienia krawdzi redukujcej odlego
         // uaktualnij dist[][]. Obliczaj z uyciem liczb typu long, aby
         // unikn nadmiaru wskutek odlegoci nieskoczonej.
         for (int j = 0; j < n; j++) {
            long newLen = dist[i][k];
            newLen += dist[k][j];

            if (newLen < dist[i][j]) {
               dist[i][j] = newLen;
               pred[i][j] = pred[k][j];
            }
         }
      }
   }
}
